1 package uba.db.client.ui;
2
3 import javax.swing.JButton;
4 import javax.swing.JFrame;
5 import javax.swing.JOptionPane;
6 import javax.swing.JPanel;
7 import javax.swing.JScrollPane;
8 import javax.swing.JTabbedPane;
9 import javax.swing.JTextPane;
10
11 import uba.db.client.model.ClientManager;
12
13 /***
14 * Ventana cliente.
15 *
16 * @version $Revision$
17 */
18 public class ClientWindow extends JFrame {
19
20 private javax.swing.JPanel jContentPane = null;
21
22 private JTabbedPane jTabbedPane = null;
23
24 private JScrollPane jScrollPane = null;
25
26 private JTextPane jTextPane = null;
27
28 private JScrollPane jScrollPane2 = null;
29
30 private JPanel jPanel = null;
31
32 private JButton jButton1 = null;
33
34 private JButton jButton = null;
35
36 private String currentResult;
37
38 /***
39 * El manager que maneja el modelo que representa la ventana
40 */
41 private ClientManager manager;
42
43 /***
44 * Colabora con la ventana para tomar decisiones, hacer procesamiento, etc
45 */
46 private ClientWindowController controller;
47
48 private JTextPane jTextPane1 = null;
49
50 private JScrollPane jScrollPane1 = null;
51
52 private JTextPane jTextPane2 = null;
53
54 private String currentQueryPlan;
55
56 /***
57 * This is the default constructor
58 */
59 public ClientWindow(ClientManager m) {
60 super();
61 initialize(m);
62 }
63
64 /***
65 * This method initializes this
66 *
67 * @return void
68 */
69 private void initialize(ClientManager m) {
70 this.setTitle("DataBase Client");
71 this.setSize(300, 200);
72 this.setContentPane(getJContentPane());
73 this.setVisible(true);
74 manager = m;
75 controller = new ClientWindowController(this);
76 }
77
78 /***
79 * This method initializes jContentPane
80 *
81 * @return javax.swing.JPanel
82 */
83 private javax.swing.JPanel getJContentPane() {
84 if (jContentPane == null) {
85 jContentPane = new javax.swing.JPanel();
86 jContentPane.setLayout(new java.awt.BorderLayout());
87 jContentPane.add(getJTabbedPane(), java.awt.BorderLayout.CENTER);
88 jContentPane.add(getJPanel(), java.awt.BorderLayout.NORTH);
89 jContentPane.setVisible(true);
90 }
91 return jContentPane;
92 }
93
94 /***
95 * This method initializes jTabbedPane
96 *
97 * @return javax.swing.JTabbedPane
98 */
99 private JTabbedPane getJTabbedPane() {
100 if (jTabbedPane == null) {
101 jTabbedPane = new JTabbedPane();
102 jTabbedPane.addTab("Query", null, getJScrollPane(), null);
103 jTabbedPane.addTab("Result", null, getJScrollPane2(), null);
104 jTabbedPane.addTab("Query Plan", null, getJScrollPane1(), null);
105 }
106 return jTabbedPane;
107 }
108
109 /***
110 * This method initializes jScrollPane
111 *
112 * @return javax.swing.JScrollPane
113 */
114 private JScrollPane getJScrollPane() {
115 if (jScrollPane == null) {
116 jScrollPane = new JScrollPane();
117 jScrollPane.setViewportView(getJTextPane());
118 }
119 return jScrollPane;
120 }
121
122 /***
123 * This method initializes jTextPane
124 *
125 * @return javax.swing.JTextPane
126 */
127 private JTextPane getJTextPane() {
128 if (jTextPane == null) {
129 jTextPane = new JTextPane();
130 }
131 return jTextPane;
132 }
133
134 /***
135 * This method initializes jScrollPane2
136 *
137 * @return javax.swing.JScrollPane
138 */
139 private JScrollPane getJScrollPane2() {
140 if (jScrollPane2 == null) {
141 jScrollPane2 = new JScrollPane();
142 jScrollPane2.setViewportView(getJTextPane1());
143 }
144 return jScrollPane2;
145 }
146
147 /***
148 * This method initializes jPanel
149 *
150 * @return javax.swing.JPanel
151 */
152 private JPanel getJPanel() {
153 if (jPanel == null) {
154 jPanel = new JPanel();
155 jPanel.add(getJButton(), null);
156 jPanel.add(getJButton1(), null);
157 jPanel.setVisible(true);
158 }
159 return jPanel;
160 }
161
162 /***
163 * This method initializes jButton1
164 *
165 * @return javax.swing.JButton
166 */
167 private JButton getJButton1() {
168 if (jButton1 == null) {
169 jButton1 = new JButton();
170 jButton1.setText("Export..");
171 jButton1.addActionListener(new java.awt.event.ActionListener() {
172 public void actionPerformed(java.awt.event.ActionEvent e) {
173 export();
174 }
175 });
176 }
177 return jButton1;
178 }
179
180 /***
181 * This method initializes jButton
182 *
183 * @return javax.swing.JButton
184 */
185 private JButton getJButton() {
186 if (jButton == null) {
187 jButton = new JButton();
188 jButton.setText("Run");
189
190 jButton.addActionListener(new java.awt.event.ActionListener() {
191 public void actionPerformed(java.awt.event.ActionEvent e) {
192 execute(textoAEjecutar());
193 }
194 });
195 }
196 return jButton;
197 }
198
199 /***
200 * Abre una ventana con icono de error
201 *
202 * @param s
203 * el string a mostrar
204 */
205 public void notifyError(String s) {
206 JOptionPane.showMessageDialog(this, s, "Blueberry Client Error",
207 JOptionPane.ERROR_MESSAGE);
208 }
209
210 /***
211 * Abre una ventana con icono de información
212 *
213 * @param s
214 * el string a mostrar
215 */
216 public void notifyInformation(String s) {
217 JOptionPane.showMessageDialog(this, s, "Blueberry Client Information",
218 JOptionPane.INFORMATION_MESSAGE);
219 }
220
221 /***
222 * Busca el string que se usará para la consulta
223 *
224 * @return el texto para usar
225 */
226 private String textoAEjecutar() {
227 String ret = jTextPane.getSelectedText();
228 if (ret == null)
229 ret = jTextPane.getText();
230 return ret;
231 }
232
233 /***
234 * Ejecuta la consulta
235 *
236 * @param s
237 * el texto para usar
238 */
239 private void execute(String s) {
240 controller.emptyResults(jTextPane1);
241 controller.emptyResults(jTextPane2);
242 manager.execute(s);
243 controller.showResults(currentResult, jTextPane1);
244 controller.showResults(currentQueryPlan, jTextPane2);
245 }
246
247 /***
248 * Exporta los resultados de la consulta a donde se indique.
249 *
250 */
251 private void export() {
252
253 manager.export();
254 }
255
256 /***
257 * Devuelve el contenido actual de la tabla de resultados.
258 *
259 * @return El contenido actual de la tabla de resultados.
260 */
261 public String result() {
262 return currentResult;
263 }
264
265 /***
266 * This method initializes jTextPane1
267 *
268 * @return javax.swing.JTextPane
269 */
270 private JTextPane getJTextPane1() {
271 if (jTextPane1 == null) {
272 jTextPane1 = new JTextPane();
273 }
274 return jTextPane1;
275 }
276
277 /***
278 * This method initializes jScrollPane1
279 *
280 * @return javax.swing.JScrollPane
281 */
282 private JScrollPane getJScrollPane1() {
283 if (jScrollPane1 == null) {
284 jScrollPane1 = new JScrollPane();
285 jScrollPane1.setViewportView(getJTextPane2());
286 }
287 return jScrollPane1;
288 }
289
290 /***
291 * This method initializes jTextPane2
292 *
293 * @return javax.swing.JTextPane
294 */
295 private JTextPane getJTextPane2() {
296 if (jTextPane2 == null) {
297 jTextPane2 = new JTextPane();
298 }
299 return jTextPane2;
300 }
301
302 public void setResult(String tuples) {
303 currentResult = tuples;
304 }
305
306 public void setQueryPlan(String queryPlan) {
307 currentQueryPlan = queryPlan;
308 }
309
310 }